{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d8d23c99-b0a2-42c8-9e47-df2bfcc24c19",
   "metadata": {},
   "source": [
    "# tflite部署模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "76ffd02e-f672-44e6-a5ff-eaeb3a6592ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9526d65-1a0a-4c56-b0c6-f97e594a02a6",
   "metadata": {},
   "source": [
    "### 从文件加载解释器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "707a375c-7c20-41f6-adf7-01f539eb7e50",
   "metadata": {},
   "outputs": [],
   "source": [
    "interpreter = tf.lite.Interpreter('sin.tf_lite.model')\n",
    "interpreter.allocate_tensors()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77768fb7-979a-47b5-8ecb-ff8ea1c2f103",
   "metadata": {},
   "source": [
    "### 获取模型的输入输出信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e7c6365a-f178-42b0-961b-4ec38d1743af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'name': 'input_1',\n",
       "  'index': 0,\n",
       "  'shape': array([1, 1]),\n",
       "  'shape_signature': array([-1,  1]),\n",
       "  'dtype': numpy.float32,\n",
       "  'quantization': (0.0, 0),\n",
       "  'quantization_parameters': {'scales': array([], dtype=float32),\n",
       "   'zero_points': array([], dtype=int32),\n",
       "   'quantized_dimension': 0},\n",
       "  'sparsity_parameters': {}}]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "interpreter.get_output_details()\n",
    "interpreter.get_input_details()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63d2c127-9ff6-4fa8-bda9-5a06ca05d928",
   "metadata": {},
   "source": [
    "### 生成测试数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "85a564aa-8449-40f4-8a41-51d697c0d2c2",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.linspace(0,1,num=1000,dtype='float32')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0359bc33-d02d-4a91-8c0a-c2643b8ab2a5",
   "metadata": {},
   "source": [
    "### 获取输入和输出tensor的索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9d004c1d-6882-402f-ad1f-88c7948bd5c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "input_tensor_index = interpreter.get_input_details()[0]['index']\n",
    "output_tensor_index = interpreter.get_output_details()[0]['index']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2d3fe3a2-6efd-4785-84a3-992c1fdbf166",
   "metadata": {},
   "source": [
    "### 设置输入tensor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "501c1beb-a325-4fc7-b6f7-83f832d53754",
   "metadata": {},
   "outputs": [],
   "source": [
    "interpreter.set_tensor(input_tensor_index, x[0].reshape((-1,1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6aa66729-acde-4e87-b79c-e35f73104717",
   "metadata": {},
   "source": [
    "### 调用解释器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ffcb74ce-519c-4fdc-aa16-3de9985b0a22",
   "metadata": {},
   "outputs": [],
   "source": [
    "interpreter.invoke()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7cd0f967-5d4d-4c1f-bb1c-ecaaa99f8b47",
   "metadata": {},
   "source": [
    "### 获取输出tensor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "64737e1b-9adf-4715-9100-7f1623fa9b0b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.49774837]], dtype=float32)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "interpreter.get_tensor(output_tensor_index)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e16e1feb-8d18-4476-b0a1-97d66f6abbe2",
   "metadata": {},
   "source": [
    "## 批量预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6c091694-68e6-4f37-aa80-ca8f4793f0fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "y= []\n",
    "for i in x:\n",
    "    interpreter.set_tensor(input_tensor_index, i.reshape((1,1)))\n",
    "    interpreter.invoke()\n",
    "    y.append(interpreter.get_tensor(output_tensor_index)[0][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "dbaed0f9-dd25-4cfa-862c-28df2cb4a799",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1978a316ee0>]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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SqXSqpkdUWeu87PPPotZs2bhvvvuAwAMGjQI9fX1eOCBB/D0009DLufv113hYp+FPj4+VhkVAZx4ZESpVCIxMRGpqanm54xGI1JTU5GcnNzue5KTk897PQBs3br1oq+nzl1nAHjllVfw/PPPY/PmzRg2bJgtojo8S6913759cejQIWRlZZkfN954IyZOnIisrCxERkbaMr7D6Mzf6dGjR+PkyZPmsgcA2dnZCA0NZRG5iM5c54aGhgsKR1sBlHjMWpcR8llotamxdmD16tWSSqWSPv74Y+no0aPSAw88IPn6+kqlpaWSJEnSrFmzpCeffNL8+l27dklubm7S0qVLpWPHjkmLFy/m0t4OsPQ6v/TSS5JSqZS++uorqaSkxPyora0V9SM4DEuv9R9xNU3HWHqd8/PzJW9vb+nPf/6zdOLECem7776TgoKCpH//+9+ifgSHYOl1Xrx4seTt7S198cUXUk5OjvTDDz9IcXFx0h133CHqR3AItbW10oEDB6QDBw5IAKTXXntNOnDggHT69GlJkiTpySeflGbNmmV+fdvS3r///e/SsWPHpGXLlnFp75V66623pKioKEmpVEojRoyQ9uzZY/6z8ePHS3PmzDnv9V9++aXUu3dvSalUSgMGDJA2btxo48SOyZLr3KNHDwnABY/FixfbPrgDsvTv9LlYRjrO0uu8e/duKSkpSVKpVFJsbKz0wgsvSHq93sapHY8l17mlpUX65z//KcXFxUlqtVqKjIyUHnnkEens2bO2D+5Atm3b1u6/uW3Xds6cOdL48eMveE9CQoKkVCql2NhY6aOPPrJqRpkkcWyLiIiIxHHaOSNERETkGFhGiIiISCiWESIiIhKKZYSIiIiEYhkhIiIioVhGiIiISCiWESIiIhKKZYSIiIiEYhkhIiIioVhGiIiISCiWESIiIhKKZYSIiIiE+n/bfrJ2u6yWsAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,y)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3 (tf_gpu)",
   "language": "python",
   "name": "conda-env-tf_gpu-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
